CM-68944: Fetch AI guardrail config from the platform - #541
Open
Ilanlido wants to merge 4 commits into
Open
Conversation
…cally Enforcement config (per-agent Off/Report/Block modes and sensitive-path globs) is now platform-owned. session-start fetches the tenant's resolved config into ~/.cycode/ai-guardrails-config.json (TTL- and tenant-gated); scans only read the cache and overlay it onto the local policy, so the hot path never touches the network. No cache means built-in Report defaults, always synchronous. - An event whose guardrails are all Off exits before any scan, event or auth. - The two FileRead guardrails (content scan, sensitive path) keep independent modes via a per-check action. - ai-guardrails.yaml is reduced to operational knobs (timeout, max bytes, fail_open); enforcement keys older CLIs wrote are stripped, and --mode on install is deprecated. - Atomic write and corrupt-file quarantine are shared helpers in path_utils. Co-Authored-By: Claude Code <noreply@anthropic.com>
There was a problem hiding this comment.
Claude Code Review
This repository is configured for manual code reviews. Comment @claude review for a one-time review, or @claude review always to subscribe this PR to a review on every future push.
Tip: disable this comment in your organization's Code Review settings.
Both sides touched session start. CM-71972 added skills collection to the session sweep; this branch added the guardrail config fetch. The import block takes both, and the two independent test blocks are kept side by side. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Ilanlido
commented
Sep 10, 2026
Review follow-up on the guardrail config cache. DEFAULT_POLICY carried prompt/file_read/mcp enforcement keys that the platform overlay overwrites on every scan, so they were dead defaults the installer still wrote into the user's ai-guardrails.yaml. It now holds knobs only, with the sensitive-path fallback list moved to DEFAULT_SENSITIVE_PATH_GLOBS. load_policy whitelists the keys a local file may contribute instead of stripping the ones it may not. The strip-list had already missed mcp.scan_arguments, which let a repo-level file switch off MCP argument scanning; a whitelist cannot miss a key. strip_platform_managed_keys stays for the write path only, where it drops platform sections while keeping whatever else the user put in the file. The handlers' `enabled` gates and the mcp scan_arguments gate go with them: nothing could set them any more, and an all-Off event is skipped in scan_command. The matrix cell vocabulary becomes GuardrailCellMode, kept apart from GuardrailsMode so Off does not leak into `ai-guardrails install --mode`. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Enforcement config (per-agent Off/Report/Block modes and sensitive-path globs) is now platform-owned. session-start fetches the tenant's resolved config into ~/.cycode/ai-guardrails-config.json (TTL- and tenant-gated); scans only read the cache and overlay it onto the local policy, so the hot path never touches the network. No cache means built-in Report defaults, always synchronous.